import pandas as pd

# ==================== 修改输入时间步长方法 ====================
# ==================== 配置参数 ====================
INPUT_FILE = '100(1).xlsx'  # 输入Excel文件路径
OUTPUT_FILE = '100出流整理1.xlsx'  # 输出Excel文件路径
TIME_COL_NAME = 'Date Time'  # 时间列的列名（请根据实际Excel列名修改）
INTERPOLATE_METHOD = 'linear'  # 插值方法选项：'linear'（线性）| 'ffill'（前向填充）| 'bfill'（后向填充）| 'polynomial'（多项式）

# ==================== 数据处理 ====================
# 读取Excel文件
df = pd.read_excel(INPUT_FILE)

# 解析时间列（将不符合 '%d-%m-%Y %H:%M:%S' 格式的值转为NaT）
df[TIME_COL_NAME] = pd.to_datetime(
    df[TIME_COL_NAME],
    format='%d-%m-%Y %H:%M:%S',  # 若时间格式不同需修改此参数
    errors='coerce'
)

# 删除时间列包含NaT（无效时间）的行
df = df.dropna(subset=[TIME_COL_NAME])

# 设置时间列为索引（重采样需要时间索引）
df = df.set_index(TIME_COL_NAME)

# 按10分钟步长重采样，取每个时间段的第一个有效值（可能产生NaN）
df_resampled = df.resample('10min').first()

# ==================== 插值处理 ====================
# 对重采样后的空值进行插值（根据配置参数选择方法）
if INTERPOLATE_METHOD == 'polynomial':
    # 多项式插值需要指定阶数（这里设为2阶，可根据需求调整）
    df_resampled = df_resampled.interpolate(method=INTERPOLATE_METHOD, order=2)
else:
    # 线性/前向/后向等简单插值直接调用
    df_resampled = df_resampled.interpolate(method=INTERPOLATE_METHOD)

# 注意：若所有列都为空值（如开头/结尾的缺失），插值无法填充，可添加后处理：
# df_resampled = df_resampled.ffill().bfill()  # 先前向填充再后向填充确保无空值

# ==================== 输出结果 ====================
# 重置索引，使时间列重新成为普通列
df_resampled = df_resampled.reset_index()

# 保存重采样及插值后的数据到新Excel文件（不保留原索引）
df_resampled.to_excel(OUTPUT_FILE, index=False)

print(f"处理完成！重采样及插值结果已保存至：{OUTPUT_FILE}")
